package com.mingweicai.intergration.test;


import java.lang.reflect.Method;
import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

public class CglibProxyMethodInterceptor implements MethodInterceptor {

  private Object target;//需要代理的目标对象

  /**
   *
   * @param obj 代理对象
   * @param method 代理方法
   * @param arr 参数列表
   * @param proxy
   * @return
   * @throws Throwable
   */
  @Override
  public Object intercept(Object obj, Method method, Object[] arr, MethodProxy proxy) throws Throwable {
    if(method.getName().equals("print") || method.getName().equals("print2")){
      System.out.println("------经纪人谈判------");
      Object invoke = method.invoke(target, arr);
      System.out.println("------经纪人收费------");
      return invoke;
    } else {
      Object invoke = method.invoke(target, arr);
      return invoke;
    }
  }

  /**
   *
   * @param objectTarget 目标对象
   * @return
   */
  public Object getCglibProxy(Object objectTarget){
    //为目标对象target赋值
    this.target = objectTarget;
    Enhancer enhancer = new Enhancer();
    //设置父类,因为Cglib是针对指定的类生成一个子类，所以需要指定父类
    enhancer.setSuperclass(objectTarget.getClass());
    enhancer.setCallback(this);// 设置回调
    Object result = enhancer.create();//创建并返回代理对象
    return result;
  }

}
